package com.evil.common.oss.service;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

public abstract class FileStorageService {

    /**
     * 获取访问域名
     *
     * @return String
     */
    public abstract String getHost();

    /**
     * 获取预览域名
     *
     * @return String
     */
    public abstract String getPreview();

    /**
     * 获取访问文件路径
     *
     * @return String
     */
    public abstract String getVisitPath();

    /**
     * 获取OSS类型
     *
     * @return int
     */
    public abstract int getServiceProvider();

    /**
     * 获取文件URL参数
     *
     * @param path path
     * @return String fileName=FILE
     */
    public abstract String getFileUrl(String path);

    /**
     * 获取文件URL
     *
     * @param path path
     * @param fileName fileName
     */
    public abstract String getDownloadUrl(String path, String fileName);

    /**
     * 文件上传
     *
     * @param data           data
     * @param path           path
     * @param sourceFileName sourceFileName
     * @param contentType    contentType
     * @param isPreview      是否预览
     * @return String
     */
    public abstract String upload(byte[] data, String path, String sourceFileName, String contentType, boolean isPreview);

    /**
     * 文件上传
     *
     * @param inputStream    inputStream
     * @param path           path
     * @param sourceFileName sourceFileName
     * @param contentType    contentType
     * @param isPreview      是否预览
     * @return String
     */
    public abstract String upload(InputStream inputStream, String path, String sourceFileName, String contentType, boolean isPreview);

    /**
     * 获取文件
     *
     * @param filePath filePath
     * @param file     输出的文件
     * @return File
     */
    public abstract File getFileByFilePath(String filePath, File file);

    /**
     * 获取下载URL
     *
     * @param filePath       文件path
     * @param fileName       文件名称
     * @param expirationTime 过期时间
     * @return URL
     */
    public abstract URL getDownloadUrl(String filePath, String fileName, Date expirationTime);
}
